package com.hanamaki.homework;



import com.hanamaki.jdbc.until.JDBC_C3P0_Util;
import org.testng.Assert;
import org.testng.annotations.BeforeClass;
import org.testng.annotations.DataProvider;
import org.testng.annotations.Test;

/**
 * 三角形的测试类
 * java+TestNg
 */
public class TriangleTest {

    /* 1.  */
    /*想要测试的  是 Triangle 这个 类中的方法*/
    /*首先 实例化 Triangle  类*/
    static Triangle triangle;

    @BeforeClass
    public void setUp() {
        triangle = new Triangle();
    }


    /* 2. */
    /* 编写 测试方法 @Test*/
    /* 4. 使用  需要的 数据源  */
    @Test(dataProvider = "dp1",enabled = false)
    public void isTriangleTest(int first, int second, int three, boolean excepted) {
        /*想要 测试 能否构成三角形  就要调用 方法测试 方法 需要 参数  ? 数据从哪来?参数化 (静态初始化 读文件  读数据库 [读excel] )*/
        boolean actual = triangle.isTriangle(first, second, three);

        /* 添加 断言  判断 测试 是否成功  */
        Assert.assertEquals(actual, excepted);


    }


    /**
     * 测试能否构成  三角形的 方法 数据从 数据库中 获取
     * @param first
     * @param second
     * @param three
     * @param excepted
     */
    @Test(dataProvider = "dp2")
    public void isTriangleTest1(String first, String second, String three, String excepted,String perimeter,String areas) {
        /*想要 测试 能否构成三角形  就要调用 方法测试 方法 需要 参数  ? 数据从哪来?参数化 (静态初始化 读文件  读数据库 [读excel] )*/
        boolean actual = triangle.isTriangle(Integer.parseInt(first), Integer.parseInt(second), Integer.parseInt(three));

        /* 添加 断言  判断 测试 是否成功  */
        /* String  类型  和 布尔类型 不能 做比较*/
//        Assert.assertEquals(actual, Boolean.parseBoolean(excepted));

        /* 定义  一个 标志位 */
        boolean flag = false;
        if (excepted.equals("true")) {
            flag = true;
        } else {
            flag = false;
        }

        Assert.assertEquals(actual, flag,"断言信息:");


        /* 如果 实际结果  为  true 说明可以构成  三角形   计算 周长 和面积 */
        if (actual) {

            /*计算 周长*/
            double perimeter1 = triangle.perimeter();

            /* 添加 断言  判断是否 计算无误*/
            Assert.assertEquals(perimeter1, Double.parseDouble(perimeter));

        }

    }


    /* 3. 参数化  @DataProvider */

    /**
     * dp1  是 数据源的名称  在数据准备好之后 测试方法  可以根据 数据源的名字来取数据
     *
     * @return
     */
    @DataProvider
    public Object[][] dp1() {
        /* 数据源是 以 二维数组的形式 存放的  定义一个二维数组*/
        Object[][] dp1 = new Object[4][4];
        dp1[0] = new Object[]{3, 4, 5, true};
        dp1[1] = new Object[]{1, 1, 1, true};
        dp1[2] = new Object[]{-1, 0, 9, true};
        dp1[3] = new Object[]{1, 2, 3, false};
        return dp1;
    }

    /*  读取 数据库中 的  数据 来 测试 三角形 */
    @DataProvider
    public Object[][] dp2() {
        /* 通过之前 封装好的  JDBC_C3p0_Util工具类 来查找*/
        Object[][] triangles = JDBC_C3P0_Util.getSqlContent("Triangle");

        return triangles;
    }


}
